<!DOCTYPE html>












  


<html class="theme-next gemini use-motion" lang="Chinese">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"/>
<meta name="theme-color" content="#222">












<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />






















<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />

<link href="/css/main.css?v=6.4.0" rel="stylesheet" type="text/css" />


  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=6.4.0">


  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=6.4.0">


  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=6.4.0">


  <link rel="mask-icon" href="/images/logo.svg?v=6.4.0" color="#222">









<script type="text/javascript" id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Gemini',
    version: '6.4.0',
    sidebar: {"position":"left","display":"post","offset":12,"b2t":false,"scrollpercent":false,"onmobile":false},
    fancybox: false,
    fastclick: false,
    lazyload: false,
    tabs: true,
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>


  




  <meta property="og:type" content="website">
<meta property="og:title" content="政子的博客">
<meta property="og:url" content="http://blog.zhengzi.me/page/3/index.html">
<meta property="og:site_name" content="政子的博客">
<meta property="og:locale" content="Chinese">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="政子的博客">






  <link rel="canonical" href="http://blog.zhengzi.me/page/3/"/>



<script type="text/javascript" id="page.configurations">
  CONFIG.page = {
    sidebar: "",
  };
</script>

  <title>政子的博客</title>
  









  <noscript>
  <style type="text/css">
    .use-motion .motion-element,
    .use-motion .brand,
    .use-motion .menu-item,
    .sidebar-inner,
    .use-motion .post-block,
    .use-motion .pagination,
    .use-motion .comments,
    .use-motion .post-header,
    .use-motion .post-body,
    .use-motion .collection-title { opacity: initial; }

    .use-motion .logo,
    .use-motion .site-title,
    .use-motion .site-subtitle {
      opacity: initial;
      top: initial;
    }

    .use-motion {
      .logo-line-before i { left: initial; }
      .logo-line-after i { right: initial; }
    }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="Chinese">

  
  
    
  

  <div class="container sidebar-position-left 
  page-home">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta ">
    

    <div class="custom-logo-site-title">
      <a href="/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">政子的博客</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
    
      
        <p class="site-subtitle">强迫症|学习者|伪文青</p>
      
    
  </div>

  <div class="site-nav-toggle">
    <button aria-label="Toggle navigation bar">
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>



<nav class="site-nav">
  
    <ul id="menu" class="menu">
      
        
        
        
          
          <li class="menu-item menu-item-home">
    <a href="/" rel="section">
      <i class="menu-item-icon fa fa-fw fa-home"></i> <br />Home</a>
  </li>
        
        
        
          
          <li class="menu-item menu-item-about">
    <a href="/about/" rel="section">
      <i class="menu-item-icon fa fa-fw fa-user"></i> <br />About</a>
  </li>
        
        
        
          
          <li class="menu-item menu-item-tags">
    <a href="/tags/" rel="section">
      <i class="menu-item-icon fa fa-fw fa-tags"></i> <br />Tags</a>
  </li>
        
        
        
          
          <li class="menu-item menu-item-archives">
    <a href="/archives/" rel="section">
      <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />Archives</a>
  </li>

      
      
    </ul>
  

  

  
</nav>



  



</div>
    </header>

    


    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          
            

          
          <div id="content" class="content">
            
  <section id="posts" class="posts-expand">
    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2017/02/19/freeradius-e5-ae-89-e8-a3-85-e9-85-8d-e7-bd-ae/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2017/02/19/freeradius-e5-ae-89-e8-a3-85-e9-85-8d-e7-bd-ae/" itemprop="url">
                  freeradius安装配置
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2017-02-19 11:14:00" itemprop="dateCreated datePublished" datetime="2017-02-19T11:14:00+08:00">2017-02-19</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/开发/" itemprop="url" rel="index"><span itemprop="name">开发</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <h1 id="编译安装freeradius-server"><a href="#编译安装freeradius-server" class="headerlink" title="编译安装freeradius-server"></a>编译安装freeradius-server</h1><p><a href="http://wiki.freeradius.org/building/Home" target="_blank" rel="noopener">freeRADIUS WIKI</a></p>
<h3 id="先更新软件"><a href="#先更新软件" class="headerlink" title="先更新软件"></a>先更新软件</h3><p>$sudo apt update<br>$sudo apt upgrade</p>
<h3 id="在git仓库里clone-freeradius-server"><a href="#在git仓库里clone-freeradius-server" class="headerlink" title="在git仓库里clone freeradius-server"></a>在git仓库里clone freeradius-server</h3><p>$ git clone <a href="https://github.com/FreeRADIUS/freeradius-server.git" target="_blank" rel="noopener">https://github.com/FreeRADIUS/freeradius-server.git</a><br>$ cd freeradius-server</p>
<h3 id="检查版本，如果需要的话要用git-checkout切换版本"><a href="#检查版本，如果需要的话要用git-checkout切换版本" class="headerlink" title="检查版本，如果需要的话要用git checkout切换版本"></a>检查版本，如果需要的话要用git checkout切换版本</h3><p>$ git status<br>On branch v4.0.x<br>Your branch is up-to-date with ‘origin/v4.0.x’.</p>
<h3 id="查看依赖并安装"><a href="#查看依赖并安装" class="headerlink" title="查看依赖并安装"></a>查看依赖并安装</h3><p>$ vim doc/developer/dependencies.rst</p>
<h3 id="根据说明，安装libtalloc和kqueue依赖"><a href="#根据说明，安装libtalloc和kqueue依赖" class="headerlink" title="根据说明，安装libtalloc和kqueue依赖"></a>根据说明，安装libtalloc和kqueue依赖</h3><p>$ sudo apt install libtalloc2 libtalloc-dev<br>$ sudo apt-get install libkqueue-dev</p>
<h3 id="查看安装说明"><a href="#查看安装说明" class="headerlink" title="查看安装说明"></a>查看安装说明</h3><p>$ vim INSTALL.rst</p>
<h3 id="进行普通安装，如果需要改变配置直接参考说明文档即可"><a href="#进行普通安装，如果需要改变配置直接参考说明文档即可" class="headerlink" title="进行普通安装，如果需要改变配置直接参考说明文档即可"></a>进行普通安装，如果需要改变配置直接参考说明文档即可</h3><p>$ ./configure</p>
<p>check出错：configure: error: FreeRADIUS requires support for the C11 _Generic keyword 原因：You need gcc at least 4.9 with C11 support to build development branches (v3.1.x or v4.0.x). 解决方法：To build the latest stable versions</p>
<p>$ git checkout release_3_0_11<br>$./configure<br>$ make<br>$ sudo make install</p>
<h2 id="安装成功后测试"><a href="#安装成功后测试" class="headerlink" title="安装成功后测试"></a>安装成功后测试</h2><h3 id="先关闭freeradius服务"><a href="#先关闭freeradius服务" class="headerlink" title="先关闭freeradius服务"></a>先关闭freeradius服务</h3><p>$ sudo service freeradiusd stop</p>
<h3 id="然后以debug方式启动freeradius"><a href="#然后以debug方式启动freeradius" class="headerlink" title="然后以debug方式启动freeradius"></a>然后以debug方式启动freeradius</h3><p>$ sudo radiusd -X</p>
<h3 id="然后在另一个终端里启动测试程序"><a href="#然后在另一个终端里启动测试程序" class="headerlink" title="然后在另一个终端里启动测试程序"></a>然后在另一个终端里启动测试程序</h3><p>$ radtest test test localhost 0 testing123</p>
<p>如果收到</p>
<p>Sent Access-Request Id 94 from 0.0.0.0:58263 to 127.0.0.1:1812 length 74<br>        User-Name = “test”<br>        User-Password = “test”<br>        NAS-IP-Address = 127.0.0.1<br>        NAS-Port = 0<br>        Message-Authenticator = 0x00<br>        Cleartext-Password = “test”<br>Received Access-Reject Id 94 from 127.0.0.1:1812 to 0.0.0.0:0 length 20<br>(0) -: Expected Access-Accept got Access-Reject</p>
<p>说明连接测试成功</p>
<h3 id="安装MySQL"><a href="#安装MySQL" class="headerlink" title="安装MySQL"></a>安装MySQL</h3><p>$ sudo apt install mysql</p>
<h3 id="配置MySQL和freeradius的连接"><a href="#配置MySQL和freeradius的连接" class="headerlink" title="配置MySQL和freeradius的连接"></a>配置MySQL和freeradius的连接</h3><p>进入MySQL管理界面，并创先Radius表和用户并导入表</p>
<p>$ mysql -uroot -p<br>> CREATE DATABASE radius;<br>>  use radius;<br>>  source  /etc/freeradius/sql/mysql/admin.sql;<br>admin.sql里面可以修改raidius的账号密码，但也需要在raddb/sql.conf中修改<br>>  source  /etc/freeradius/sql/mysql/schema.sql;<br>>  source  /etc/freeradius/sql/mysql/ippool.sql;<br>>  source  /etc/freeradius/sql/mysql/schema.sql;<br>>  source  /etc/freeradius/sql/mysql/wimax.sql;<br>>  source  /etc/freeradius/sql/mysql/cui.sql;<br>>  source  /etc/freeradius/sql/mysql/nas.sql;</p>
<h3 id="配置freeradius"><a href="#配置freeradius" class="headerlink" title="配置freeradius"></a>配置freeradius</h3><p>配置文件在/usr/local/etc/raddb</p>
<p># cd /usr/local/etc/raddb</p>
<p>仔细阅读radiusd.conf</p>
<h3 id="打开radius的sql模块"><a href="#打开radius的sql模块" class="headerlink" title="打开radius的sql模块"></a>打开radius的sql模块</h3><p># ln -s ../mods-available/sql</p>
<p>将数据库配置变为mysql，并且取消用户名密码端口ip这一组注释</p>
<p># radius -X</p>
<p>检查启动信息，如果出现</p>
<p>rlm_sql_mysql: Connected to database ‘radius’ on Localhost via UNIX socket, server version 5.5.54-0ubuntu0.14.04.1, protocol version 10</p>
<p>说明mysql连接成功</p>
<h3 id="配置用户密码"><a href="#配置用户密码" class="headerlink" title="配置用户密码"></a>配置用户密码</h3><p># vim users</p>
<p>加入一行</p>
<p>radius  Cleartext-Password := “radpass”</p>
<p>然后再次进行radtest测试，并重启radiusd服务</p>
<p># radtest radius radpass localhost 1812 testing123</p>
<p>Sent Access-Request Id 74 from 0.0.0.0:59423 to 127.0.0.1:1812 length 76<br>        User-Name = “radius”<br>        User-Password = “radpass”<br>        NAS-IP-Address = 127.0.0.1<br>        NAS-Port = 1812<br>        Message-Authenticator = 0x00<br>        Cleartext-Password = “radpass”<br>Received Access-Accept Id 74 from 127.0.0.1:1812 to 0.0.0.0:0 length 20</p>
<p>可以看到，已经连接成功</p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2017/02/06/e6-88-91-e7-9a-84php-e5-85-a5-e9-97-a8-e5-ae-9e-e8-b7-b5/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2017/02/06/e6-88-91-e7-9a-84php-e5-85-a5-e9-97-a8-e5-ae-9e-e8-b7-b5/" itemprop="url">
                  我的PHP入门实践
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2017-02-06 17:58:07" itemprop="dateCreated datePublished" datetime="2017-02-06T17:58:07+08:00">2017-02-06</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/PHP/" itemprop="url" rel="index"><span itemprop="name">PHP</span></a></span>

                
                
                  , 
                
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/PHP/随笔/" itemprop="url" rel="index"><span itemprop="name">随笔</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <h2 id="开头先讲故事"><a href="#开头先讲故事" class="headerlink" title="开头先讲故事"></a>开头先讲故事</h2><p>从开始正式接触PHP到现在已经走过了接近两年的时间了。 记得最开始接触PHP的时候是大一暑假为期两周的北邮人论坛技术组的培训上。学长学姐们花了五个晚上的时间给我们讲了HTML、CSS、JavaScript、PHP、MySQL和Linux以及VIM等等的基础知识。记得当时H仅仅两个晚上就用PHP手撸出来了一套Blog。当时觉得这简直是不可能的事情。五天很快过去，我却连VIM怎么进入输入模式都没看懂，更别说去写各种前后端代码了。我还记得当时的绝望。 之后的暑假就是在各种PHP和前端视频教程中度过。记得当时是看的我的好友<a href="http://blog.lzp.name/" target="_blank" rel="noopener">志鹏同学</a>给我推荐的<a href="http://www.ycku.com/" target="_blank" rel="noopener">李炎恢</a>的PHP教学视频。我看视频的方式就是两倍速度快进，视频看完以后困了就睡觉（只是看视频而不去手写代码），睡醒了就继续起来看，所以当时看学习视频的时候连白天黑夜都已经分不清楚了。看完视频也总是有一些进步，已经可以用自己的（或者是模糊印象中李炎恢的）套路写出一些简单的网站了。但是网站的前端还是很丑陋（因为不怎么会JS，也不会套模版），而且很多东西也是不成体系。 第一次实践就是在写VLiner（微联，已经关闭，并不是现在的VLine）网站的时候。网站很简单，就是像问卷星那样可以提供社团招新报名注册、名单汇总或者订阅报纸等等简单的功能。当时不怎么懂数据库，也不懂得怎么优化并发，所以访问的人一多网站就会崩溃（当时使用CNZZ统计应该是高峰期一个小时也就只有3、4K的访问量），更要命的是不懂得怎么复用和自动化，所以针对于每个组织的页面都是我手工一个一个填上去的。大概团队撑了半年左右，做不下去就散伙了。 接下来是北邮人论坛以及一个自己拍脑门想的云印项目，这时候我第一次接触到了MVC架构和Yaf框架，不过也都半途而废。 再次的PHP实践机会就是一年之后的<a href="http://www.danmakupie.com" target="_blank" rel="noopener">弹幕派</a>了。在一次Hackahton中，我用二十行PHP代码和<a href="http://www.cyprestar.com/" target="_blank" rel="noopener">Cyprestar</a>同学就完成了弹幕派的最初原型。之后在不断重构的过成功逐渐形成了自己的一些套路。这个套路也用在了<a href="http://vline.zhengzi.me" target="_blank" rel="noopener">VLine</a>和北<a href="http://bbss.zhengzi.me" target="_blank" rel="noopener">邮人论坛每日十大查询</a>上，主要就是通过MVC架构和工厂模式实现了一个很简陋的API框架（到底算不算框架呢？）。 接下来在<a href="http://www.joyreserve.com" target="_blank" rel="noopener">乐享其约</a>项目中见识了ThinkPHP3.2（当时也并不觉得有多好用，就是一堆方法的封装），在弹幕派重构的时候又见识了Yii2框架。</p>
<h2 id="PHP实践方式"><a href="#PHP实践方式" class="headerlink" title="PHP实践方式"></a>PHP实践方式</h2><p>我认为从最开始的原生野蛮的PHP写法到现在所认知的几种框架，构成了PHP的几种实践方式。</p>
<h3 id="原生野蛮，没有架构"><a href="#原生野蛮，没有架构" class="headerlink" title="原生野蛮，没有架构"></a>原生野蛮，没有架构</h3><p>如果就像我最开始写Vliner的时候，从W3school里面看完PHP教程就去撸代码的话，代码大概就会变成这样。 <a href="http://blog.zhengzi.me/wp-content/uploads/2017/02/微信截图_20170206160254.png"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/02/微信截图_20170206160254.png" alt=""></a> PHP代码和HTML页面全都混写在一起，而且都是采用面向过程的方式完成。用一个页面完成一个逻辑，然后跳转到下一个页面继续。没有MVC，没有设计模式。 这样的后果就是逻辑非常混乱，而且代码很难复用，一定有许多复制粘贴的操作，就更不提代码的运行效率、维护成本和安全问题了。 当然，事情并不一定总是这样。比如WikiPedia的开源版本MediaWiki，代码也同样没有使用MVC模式，没有使用框架，都是自己的逻辑。但是MediaWiki也经受住了历史的考验，已经安然运行了十六年多。里面也有许多非常精彩的实践方式。</p>
<h3 id="自己苦思冥想，根据自己的理解规范代码"><a href="#自己苦思冥想，根据自己的理解规范代码" class="headerlink" title="自己苦思冥想，根据自己的理解规范代码"></a>自己苦思冥想，根据自己的理解规范代码</h3><p>既然框架就是为了规范代码，所以自己的一套代码规范也可以称作是“比较蠢”的框架了。 大概在弹幕派、每日十大查询和vline中，我都使用了自己的一套代码规范，这是在一次一次重构弹幕派代码的时候自己想出来的。为什么不去参考别人的？一是因为懒，看别人的代码进入别人的思路的确需要耗费很多注意力，二来就是心虚，觉得自己水平不够，看别人的代码怎么会看得懂。 所以就根据自己理解的MVC构建了自己的一套代码体系（其实和原始的MVC非常相似）。以下是这个简单框架的目录结构： <a href="http://blog.zhengzi.me/wp-content/uploads/2017/02/微信截图_20170206161109.png"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/02/微信截图_20170206161109.png" alt=""></a> 应用访问的方式大概是从最外层的Index通过不同的参数调用使用不同的Controller并载入配置文件，Controller过滤输入，完成异常处理，并且根据不同参数选择不同的方法去执行Model的内容，而Model是文件或数据库的增删查改操作的封装，通过继承最基本的数据库或文件的Model实现，最后Controller还可以根据需要返回Json或者渲染View。 在数据库的Model中使用了一个好友自己封装的数据库基类，在View渲染中试用了Smarty引擎。这样，需求比较简单的WebApp使用这套代码就可以很轻松地实现。 这里，也应该抛弃FTP，学会使用Git或者SVN进行版本控制，以便于多人协作。 虽然这个框架简单到都没有一个像样的路由，但每次写代码都屡试不爽，以至于我沉溺其中无法自拔，耽误了很多学习更好PHP思维的时间。更关键的是因为数据库基类使用的都是被PHP7抛弃的类似于mysql_connect()这种函数，所以在过去很长一段时间里我都拒绝使用PHP7。 随着工程量的扩大，简单的工厂模式因为写起来重复代码很多，而且不支持autoloader，所以这个小框架也逐渐让我感到力不从心。特别是自己封装的数据库基类并不如使用ORM模型的库用起来方便，而且也成为了应用效率的瓶颈，现在也是时候说再见了。</p>
<h3 id="使用传统大而全的PHP框架，进入该框架的社区"><a href="#使用传统大而全的PHP框架，进入该框架的社区" class="headerlink" title="使用传统大而全的PHP框架，进入该框架的社区"></a>使用传统大而全的PHP框架，进入该框架的社区</h3><p>比如ThinkPHP3.2或者Yii2都是传统大而全的PHP框架。我对这类框架是用的不多，都是在基本应用的范围内。 这类框架的缺点就在于一旦进入，就会被限制在这个框架的生态里面，不论是使用完成一些奇奇怪怪功能的插件，还是自己写的代码，都很难做到在其他框架的项目中复用，项目的命运也很可能就会和框架的命运绑定在一起。 但这类框架本身生态也非常成熟，一般都有非常庞大的社区（特别是ThinkPHP3之于中国），而且大而全，遇到问题很轻松搜索到解决方案，所以也可以作为主力开发的框架。 一个比较神奇的框架就是Yaf，它是一个由C语言写成的PHP Mod，运行时直接嵌入PHP引擎，所以性能上来说，是绝对的强悍。遇到追求性能的地方，Yaf是不二之选。但是正因为它作为一个PHP的模块存在，也丧失了一些灵活性。</p>
<h3 id="活在PHP大社区，模块化构建PHP应用"><a href="#活在PHP大社区，模块化构建PHP应用" class="headerlink" title="活在PHP大社区，模块化构建PHP应用"></a>活在PHP大社区，模块化构建PHP应用</h3><p>正如我在上一篇文章<a href="http://blog.zhengzi.me/682.html">《Modern PHP》——关于 PHP 的最佳实践和最新进展</a>中所说，如今的PHP已经不是网上许多文章所写或者是许多教程里所讲的那样，PHP已经蜕变成了一门（不是那么）优雅而现代的语言。 Composer的出现，让工程化的思想带入了PHP，世界上最好的语言终于不在乱糟糟，她开始变得标准而统一。（这句话其实来自justjavac大大的原话，原文链接：<a href="http://zhihu.com/question/27453375/answer/36939511" target="_blank" rel="noopener">http://zhihu.com/question/27453375/answer/36939511</a>） Composer构建了一个大的PHP社区，就像NodeJs的nmp或者Python的pip一样，Composer以非常优雅的方式完成了PHP应用的构建。 以往的实践方式就是不断从网上下载代码，拷贝到目录里（这完全没办法对第三方代码进行版本控制），说不定还会对第三方代码进行修改，那么如果更新的话，就更是灾难。而且Composer也减少了许多造轮子行为的发生（如果我之前知道这个社区的话，那么为什么还会有自己封装的那么简陋的MySql类库呢？） 而Laravel正是这个精神的践行者。如果说Modern PHP还不是那么优雅的话，那么Laravel就补齐了PHP的最后一块短板。Laravel符合PHP的PSR标准，而且采用了Composer模块化的方式构建，而且基本没有自己重复造轮子（甚至许多库都直接来自Symfony框架）。这样，只要符合标准的PHP库将都会是Laravel生态的一员。可以想象，如果构建一个长期运行的项目，Laravel自然是不二之选。</p>
<h3 id="使用PHP做更多的事情"><a href="#使用PHP做更多的事情" class="headerlink" title="使用PHP做更多的事情"></a>使用PHP做更多的事情</h3><p>其实PHP还可以做更多别的事情，比如去做CLI开发。 借助Composer和AutoLoader，PHP具有了不亚于Python作为胶水语言的能力，可以作为替代Bash的更方便的脚本解释器。 PS：如果还非要说php还不优雅的话，那就只剩下开头的&lt;?php符号（有开头没有结尾，不知逼死了多少强迫症）和Bash脚本的#!/usr/bin/php冲突的问题了。 PHP甚至还可以来作为一个高性能的Web服务器，性能不输给Nginx，而且可以高效完成许多Socket相关操作。<a href="http://www.workerman.net/" target="_blank" rel="noopener">WorkerMan</a>是一个非常优秀的实现。 其实，PHP也可以写桌面程序，比如PHP-GTK库就是做这个的。但我觉得这样的确是多此一举，2015年以后也真就没啥动静了。</p>
<h2 id="最后讲两句"><a href="#最后讲两句" class="headerlink" title="最后讲两句"></a>最后讲两句</h2><p>到这里，我觉得现在可以算是入门PHP了吧。然而以后的路还有很长，PHP各种特性/设计模式以及优化方式我还知之甚少。 我认为PHP最大的优势在于易于上手，简单几行代码就可以写出一个网站。正是因为这种令人发指的简单，让PHP的实践方式变得异常自由，但也让PHP社区变得混乱，每一个人的水平差距会非常大。 所以我认为PHP依旧是最容易入门的一门脚本语言，学习曲线比类似Java的Spring或者C#的Asp.net平缓很多，但如果想做出一个优秀的Web应用，那么难度也绝对不比那两者低。 不论这一路还有多少坑要踩，多少锅要背，我也还是会选择走下去。 踏歌长行，梦想永在！</p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2017/02/02/e8-ae-b0-e4-b8-80-e6-ac-a1-e7-a6-bb-e5-a5-87-e7-9a-84apt-update-403-e9-94-99-e8-af-af/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2017/02/02/e8-ae-b0-e4-b8-80-e6-ac-a1-e7-a6-bb-e5-a5-87-e7-9a-84apt-update-403-e9-94-99-e8-af-af/" itemprop="url">
                  记一次离奇的apt update 403错误
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2017-02-02 00:03:43" itemprop="dateCreated datePublished" datetime="2017-02-02T00:03:43+08:00">2017-02-02</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/Linux/" itemprop="url" rel="index"><span itemprop="name">Linux</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>因为要安装一些老版本软件，所以我在阿里云刚装好的Ubuntu16.04上面添加了一些PPA源，但是发现在</p>
<p>sudo apt update</p>
<p>时，所有的PPA源使用都会出现类似</p>
<p>Err:4 <a href="http://ppa.launchpad.net/ondrej/php/ubuntu" target="_blank" rel="noopener">http://ppa.launchpad.net/ondrej/php/ubuntu</a> xenial Release<br>  403  Forbidden [IP: 112.124.140.210 80]</p>
<p>这样的403错误提示，而且IP还很奇怪（查询以后发现是阿里云的IP，但并不是本机）。 经过排查以后发现原来是阿里云在安装的时候默认使用了apt代理导致被PPA源403。 解决方案：</p>
<p>sudo vim /etc/apt/apt.conf</p>
<p>删除其中的</p>
<p>Acquire::http::Proxy “<a href="http://mirrors.aliyun.com/&quot;" target="_blank" rel="noopener">http://mirrors.aliyun.com/&quot;</a>;</p>
<p>一行即可。</p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2017/01/29/e3-80-8a-e8-a5-bf-e9-83-a8-e4-b8-96-e7-95-8c-e3-80-8b-e9-87-8c-e7-9a-84host-ef-bc-8c-e4-ba-ba-e7-b1-bb-e4-b8-96-e7-95-8c-e7-9a-84-e5-a4-96-e4-b9-a1-e4-ba-ba/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2017/01/29/e3-80-8a-e8-a5-bf-e9-83-a8-e4-b8-96-e7-95-8c-e3-80-8b-e9-87-8c-e7-9a-84host-ef-bc-8c-e4-ba-ba-e7-b1-bb-e4-b8-96-e7-95-8c-e7-9a-84-e5-a4-96-e4-b9-a1-e4-ba-ba/" itemprop="url">
                  《西部世界》的Host，人类世界的外乡人
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2017-01-29 12:46:08" itemprop="dateCreated datePublished" datetime="2017-01-29T12:46:08+08:00">2017-01-29</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/随笔/" itemprop="url" rel="index"><span itemprop="name">随笔</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <h2 id="二分心智"><a href="#二分心智" class="headerlink" title="二分心智"></a>二分心智</h2><p>二分心智的理论本来是由一个直到现在大家都认为比较扯淡的心理学家朱利安·杰恩斯花了毕生心血，查阅寻找了许多线索和资料，在70年代的著作《二分心智的崩塌：人类意识的起源》里提出（虽说扯淡，但结合中外历史想想，可能也确有其事。但苦于很多证据无法证伪，也就没法从科学上承认或者否认这个理论的存在）。整套理论用在《西部世界》的机器人意识形成中却也颇为令人信服。（具体可以参考知乎提问：<a href="https://www.zhihu.com/question/51767382" target="_blank" rel="noopener">https://www.zhihu.com/question/51767382</a>） 简单说，二分心智中一个是来自神明的声音，另一个是来自自己的声音。在我看来，这不仅仅和左右脑的分工有某种相通指出，更和我们人类的最高的思维形式有很大的关系——宗教代表的上帝同哲学代表的智慧。所以，二分心智逐渐坍缩融合的过程，其实也是宗教和哲学的一次又一次的对话与碰撞。 剧中的机器人遭遇的种种磨难和心智的逐步形成，不也正是在两种声音的左右互搏般的共同推进下而产生的？更关键的是，在这种进化中，分离的混沌意识体，终于合二为一，产生了自我，长此以往，很可能将会产生智慧。 最近上映了一部电影《血战钢锯岭》。在观影过程中，我一次一次不由地回想起二分心智。 道斯将一个来自上帝的教条，逐步地内化为自己心中的一个上帝声音（我还记得他在发现自己听不到上帝的声音时候的那种痛苦）。我想，这其中的导火索应该就是他和弟弟的那场打斗。随后，他的理性，也就是自己的心智经过痛苦的挣扎，坚决地做出了坚决不拿枪的决策，让这种来自上帝的声音，变成了他自己的信念与智慧。这伟大的智慧，成就了这名伟大的英雄。</p>
<h2 id="机器自觉"><a href="#机器自觉" class="headerlink" title="机器自觉"></a>机器自觉</h2><p>“我思故我在”是笛卡尔最广为人知的存在论论断。但我认为最有价值的并不是这句话，而是在于所思考的这个重要问题——从那一刻起，人们“可以”意识到自己正在思考，而且“可以”思考思考。 但我认为我们不单就是这样的存在，上文的二分心智也讲到人类智慧的形成不仅仅是理性思维的结果，还有一种能力是感受到超越的存在，而且现代的人类也不仅仅把这种超越的存在当作神明的力量，还会当作一种生而为人的生命体验（譬如艺术）。我们可以感受到命运、爱情、伟大、崇高、优美、悲剧，诸如此类。 回到西部世界里，Hosts接连表现出的“觉醒”，并不是真正的开始有了智慧，而只是走了一小步。一开始，他们听从来自Arnold的”声音“指引，开始走上了不是仅仅有安排好的时间线的“双线”命运。而后来她们看到了自己的代码，开始尝试进行理性批判，甚至尝试同他们的本质——代码抗争并陷入死循环。她们到那时可能已经明白了——他们是计算的合集，这大概也算是领悟自身正在思考。但是真正的觉醒还没到来，他们还没有能力去体验到超越计算的存在。 根据亚里士多德的戏剧美学观点，导演在每一处都恰到好处地留下了伏笔——西部世界的故事还远远没讲完：Dolores对于绘画的特长，Teddy对Delores的忠贞不渝的爱还有老鸨对于自己孩子的挂念，这些已经是他们感受到超越存在的基础，我相信第二季一定会展开去讲。 某种程度上讲，人类现在何尝不也是处于这个阶段呢？</p>
<h2 id="核心记忆"><a href="#核心记忆" class="headerlink" title="核心记忆"></a>核心记忆</h2><p>Host的核心记忆设定无一例外是痛苦的。Arnold甚至不惜以自己的死来为Dolores制造核心记忆，让她觉醒（然而是徒劳）。 其实心理学里有许多关于童年记忆的研究，认为许多在童年发生的事情对一个人的性格有深刻的影响。在西部世界里每一个角色基础记忆的设定也就是根据这个理论来讨论的。“傻白甜”Dolores却在想起往事的时候像是换了一个人，Bernard的每每回忆起自己儿子时候的低沉而忧郁，老鸨为了达成一件事情的果敢和决绝和回忆起自己孩子时候的痛苦，这都来自于其核心记忆。 Ford也有关于自身的核心记忆。秘密可能就在那个小屋和机器人一家里。那个家庭可能就是Ford的一家，因为种种变故，他失去了他们，多少年后，又重造了他们。如果深挖，这里也一定能找到他做现在这些事情的影子。 Ford最后帮助Bernard回到核心记忆并且让他与当时的自己和儿子进行对话，这不也正是心理咨询中通过催眠还原童年的场景并且让你和童年时的自己和解的思路？ 核心记忆虽然决定了认知的根基，但却决定不了认知的深度，如果能从核心记忆中走出，同过去的自己和解，思考会更加接近真实，而非被限制在自己的时间线中。</p>
<h2 id="语言沟通"><a href="#语言沟通" class="headerlink" title="语言沟通"></a>语言沟通</h2><p>我想第二部故事的主题会是关于机器人知道自己具有意识以后如何组建社会的问题。 社会形成的根基是沟通，或者说是语言。显然西部世界中的Host的NLP能力已经达到了和人类同等的水平，但是倘若还没有，我们想同机器人构成一个社会，那么就必须要有一个可以沟通的中间语言。 有了共通的语言，就让文化的延续变得可能。想到这一点，就让我感觉非常兴奋。 换一个角度考虑，与其说文化被人类拥有，倒不如说文化是寄居于人类身上的一种更高层的存在，它依靠人类不断去发展和繁衍。那么如果有更好的宿主——机器人，文化会不会从人类身上转移到机器人那里。有了共同的语言，这便有了根基。 但又有人会讲，机器人的思考方式同人类不同，鬼知道他们在想什么，我们的文化他们能够接受么？我不知，但隐约感觉不会。他们和我们都有足够的复杂度。</p>
<h2 id="最后讲点无关的"><a href="#最后讲点无关的" class="headerlink" title="最后讲点无关的"></a>最后讲点无关的</h2><p>有关于所欣赏的艺术品是真品还是赝品的问题的确困扰了我很久。实话实说，我分不出。 但我认为真品或赝品没那么重要。因为我关注的并不是艺术品的收藏价值，我认为更重要的东西在于保存在艺术作品背后的情感。真品是伟大的作品，赝品可能同样会是。 <a href="http://music.163.com/#/song?id=418602450" target="_blank" rel="noopener">http://music.163.com/#/song?id=418602450</a></p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2017/01/20/e3-80-8amodern-php-e3-80-8b-e5-85-b3-e4-ba-8ephp-e7-9a-84-e6-9c-80-e4-bd-b3-e5-ae-9e-e8-b7-b5-e5-92-8c-e6-9c-80-e6-96-b0-e8-bf-9b-e5-b1-95/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2017/01/20/e3-80-8amodern-php-e3-80-8b-e5-85-b3-e4-ba-8ephp-e7-9a-84-e6-9c-80-e4-bd-b3-e5-ae-9e-e8-b7-b5-e5-92-8c-e6-9c-80-e6-96-b0-e8-bf-9b-e5-b1-95/" itemprop="url">
                  《Modern PHP》——关于PHP的最佳实践和最新进展
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2017-01-20 00:52:46" itemprop="dateCreated datePublished" datetime="2017-01-20T00:52:46+08:00">2017-01-20</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/PHP/" itemprop="url" rel="index"><span itemprop="name">PHP</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/2498b4df325b54cb37c28e094e695d57-1.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/2498b4df325b54cb37c28e094e695d57-1.jpg" alt=""></a></p>
<p>先放本中文版封面镇楼</p>
<h2 id="值得一读"><a href="#值得一读" class="headerlink" title="值得一读"></a>值得一读</h2><p>在市面上各种PHP 21天从入门到精通的书已经漫天飞舞的情况下，《Modern PHP》一定是一本值得一读的从国内各大论坛/网站/课堂经历过以后的PHP进阶书籍。 《Modern PHP》是由O’Reilly推出，作者是大名鼎鼎的Slim框架的开发者。这本书推出的时间很有意思——2015年12月，这也是PHP7.0正式发布的时间，同时——也就是从那时间开始，越来越多“PHP药丸”的言论开始大行其道。所以，我一直在使用PHP的时候心情非常复杂。 不过，我想这本书是可以为PHP正名的，而且不仅仅是正名——这本书介绍了一个崭新的PHP和一个全新的PHP时代。 所以本文的题目差点被我起成卫庄体——“给我两个小时，还你一个崭新的PHP”。</p>
<h2 id="PHP不是没有问题"><a href="#PHP不是没有问题" class="headerlink" title="PHP不是没有问题"></a>PHP不是没有问题</h2><p>首先，由于PHP的历史非常曲折悠久，所以网上有许许多多的PHP教程，但是教程良莠不齐，有许多陈旧的实践方式，又由于PHP变态的向下兼容性，那些实践方式都可以完美地不加出错地运行起来，这样便造就了无数的又慢又冗余又不安全的PHP应用。而许多PHP新的有用的特性又完全没有被很好地介绍给开发者。 特别是，有许多新进入Web开发领域的人都可以是用PHP轻易地写出虽然很脏很烂很难维护，但是又看起来运行起来没有什么太大问题的代码（比如我）。所以PHP开发人员入门门槛低是PHP的一个优势，但随之而来的开发人员素质无法保证也是PHP的一个劣势。 再加之国内一些PHP培训机构或者培训视频、社区、教程（这里就点名w3school.com.cn吧，里面的数据库连接方式全都是PHP5，也就是2004年之前使用的方式）和开发框架（这里就只点名ThinkPHP3系列吧）所倡导的“能用就行”的PHP实践方式的误导…… 这些都让国内的众多开发者人为PHP已经垂垂暮矣，没有前途。</p>
<h2 id="最差实践、最佳实践、最新现状"><a href="#最差实践、最佳实践、最新现状" class="headerlink" title="最差实践、最佳实践、最新现状"></a>最差实践、最佳实践、最新现状</h2><p>但是通过《Modern PHP》这本书的介绍，和我关于PHP的一些最新实践，让我看到了PHP的希望。 首先想罗列一下看起来恐怖（因为可能许多PHP开发者也都不知道）的PHP的新特性和新实践标准的名词——命名空间、接口、性状、迭代器、生成器、闭包、字节码缓存、反射、内置服务器、CLI运行方式、PHP-FIG、PSR、组件化、PHP-FPM、XDebug、单元测试、持续测试、JIT引擎、静态类型…… 俨然，PHP现在已经变成了一门几乎无所不包（就像以前那样）的全新的语言。 说一下之前（或者说是很多教程里常见）的开发模式吧，首先用PHP的各种集成包在Windows下面搭建一个环境，如果想用框架的话就直接从官网下载框架的代码，拷贝到网站目录，然后新建一个PHP文件就直接开撸，磁盘的目录结构就是网站的URL路由，调试全靠满屏的echo，遇到不会的东西就从百度随便搜索一个方案之后把代码拷贝进去直接去用（很多时候还和框架不兼容，所以就直接脱开框架自己开写原生代码），上线的时候打开FTP软件，直接把网站拷贝进去齐活。 简单，的确非常简单，而且粗暴。但是这里面藏匿着很多问题，比如文件引用、路由配置、定位bug、单元测试、性能分析、自动化部署、版本控制、包管理与更新、性能优化、日后维护……这种各自为战的方法，也同样很不利于社区的发展。 而这本书里讲述了一种完全不同，甚至优雅程度不亚于现在比较流行的语言的PHP实践方法，这里就类比Python吧。</p>
<ul>
<li>使用统一的代码风格，类似于Python的PyLint，PHP有了使代码符合PSR规范的PHPLint</li>
<li>优秀的包管理，类似于pip，PHP可以使用更加优雅的更加细化Composer进行包管理（而且Composer还有插件可以顺便充当前端的bower或者nmp包管理器）</li>
<li>统一的autoloader，在Composer中自带了符合PSR-4规范的autoloader，终于结束了各种autoloader版本的时代，而Python则需要在__init__.py中做些手脚</li>
<li>迭代器/生成器，使用起来就和python的yield一样</li>
<li>匿名函数/闭包，就像Python的闭包和lambda表达式一样（但是闭包的作用域需要use，不是很习惯）</li>
<li>内置服务器，就像Django或Flask一样可以直接以CLI的形式启动内置服务器进行测试</li>
<li>PHP-FPM，就像uwsgi一样是一个fast-cgi的托管器</li>
<li>CLI运行方式，只要愿意，PHP可以写出像Python一样好用的命令行脚本</li>
<li>版本控制，PHP也可以使用Git或者Subversion等软件进行版本控制</li>
<li>流的概念，这里很像C#中的stream，可以有多级Pipeline，也可以通过继承让不同的流支持统一的接口</li>
<li>性状的支持，这个在Python里似乎没见到过，比较有意思，不过Python可以有多继承来完成和性状类似的事情</li>
<li>Zend OPcache，完成了类似Python对pyc文件的缓存</li>
<li>Travis CI也支持PHP，可以完成持续测试</li>
<li>JIT引擎——HHVM，性能提升很高，Python也有类似的解释器（据说PHP8的Zend引擎也会加入对JIT的支持，拭目以待吧）</li>
<li>静态类型，Hack和PHP7均支持，（可以选择声明类型or不声明类型），这使得PHP更加类似强类型语言，Python目前应该还没有相关特性（但Python是强类型语言），这和C#目前的思路有写相对应（C#可以使用var或Object做类型推断，实现一些感觉像是弱类型的功能）</li>
<li>性能提升——HHVM和PHP7，理论上的说，都比CPython快得多</li>
<li>……</li>
</ul>
<p>所以，PHP完全可以继续作为一门可以和现代大多数语言媲美（甚至更加完善）的Web开发语言（甚至可以是命令行脚本开发），而且PHP依旧具有旺盛的生命力。</p>
<h2 id="GitHub中一些有趣的PHP项目"><a href="#GitHub中一些有趣的PHP项目" class="headerlink" title="GitHub中一些有趣的PHP项目"></a>GitHub中一些有趣的PHP项目</h2><ul>
<li>ReactPHP——PHP版本的NodeJS：<a href="https://github.com/reactphp/react" target="_blank" rel="noopener">https://github.com/reactphp/react</a></li>
<li>Swoole——使用C语言拓展的PHP异步、并行、高性能框架：<a href="https://github.com/swoole/swoole-src" target="_blank" rel="noopener">https://github.com/swoole/swoole-src</a></li>
<li>WorkerMan——一个纯PHP开发的高性能Socket框架（完全可以当做WebServer来使用）：<a href="https://github.com/walkor/Workerman" target="_blank" rel="noopener">https://github.com/walkor/Workerman</a></li>
<li>Yaf——使用C语言拓展的高性能的PHP框架：<a href="https://github.com/laruence/yaf" target="_blank" rel="noopener">https://github.com/laruence/yaf</a></li>
<li>Hprose for PHP——使用PHP语言开发的跨语言远程通信中间件：<a href="https://github.com/hprose/hprose-php" target="_blank" rel="noopener">https://github.com/hprose/hprose-php</a>（当然不仅仅有PHP，还有各种语言，和Thrift非常像）</li>
</ul>
<h2 id="放弃旧的思路，开始新的PHP之旅"><a href="#放弃旧的思路，开始新的PHP之旅" class="headerlink" title="放弃旧的思路，开始新的PHP之旅"></a>放弃旧的思路，开始新的PHP之旅</h2><p>试着使用《Modern PHP》中的最新实践，多去看看国外的PHP社区和一些主流的PHP框架的PHP实践方法。 如果无从下手，建议抛弃陈旧的PHP教程，从使用Composer和写符合PSR规范的代码开始吧！在那里，会见到一个全新的有生命力的PHP社区。</p>
<h2 id="一些资料"><a href="#一些资料" class="headerlink" title="一些资料"></a>一些资料</h2><ul>
<li>作者Josh维护的社区——PHP之道：<a href="https://laravel-china.github.io/php-the-right-way/" target="_blank" rel="noopener">https://laravel-china.github.io/php-the-right-way/</a></li>
<li>ModernPHP——豆瓣：<a href="https://book.douban.com/subject/26635862/" target="_blank" rel="noopener">https://book.douban.com/subject/26635862/</a></li>
<li>ModernPHP——O’Reilly：<a href="http://shop.oreilly.com/product/0636920033868.do" target="_blank" rel="noopener">http://shop.oreilly.com/product/0636920033868.do</a></li>
<li>PHP包社区：<a href="https://packagist.org/" target="_blank" rel="noopener">https://packagist.org/</a></li>
<li>PHP官方手册：<a href="http://php.net/manual/zh/" target="_blank" rel="noopener">http://php.net/manual/zh/</a></li>
<li>PHP-FIG官网：<a href="http://www.php-fig.org/" target="_blank" rel="noopener">http://www.php-fig.org/</a></li>
<li>一些流行的PHP框架：Laravel，Symfony，Yii，Slim</li>
<li>正版W3School（可能需要梯子）：<a href="http://www.w3schools.com/php/" target="_blank" rel="noopener">http://www.w3schools.com/php/</a></li>
<li>Laravel China社区：<a href="https://laravel-china.org/" target="_blank" rel="noopener">https://laravel-china.org/</a></li>
<li>鸟哥（PHP7主要开发者）的博客：<a href="http://www.laruence.com/" target="_blank" rel="noopener">http://www.laruence.com/</a></li>
</ul>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2017/01/19/e6-9d-a5-e8-81-8a-e8-81-8ap4-e7-9a-84github-e4-bb-93-e5-ba-93/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2017/01/19/e6-9d-a5-e8-81-8a-e8-81-8ap4-e7-9a-84github-e4-bb-93-e5-ba-93/" itemprop="url">
                  来聊聊P4的GitHub仓库吧
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2017-01-19 16:36:33" itemprop="dateCreated datePublished" datetime="2017-01-19T16:36:33+08:00">2017-01-19</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/P4/" itemprop="url" rel="index"><span itemprop="name">P4</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>GitHub中P4仓库的地址：<a href="https://github.com/p4lang/" target="_blank" rel="noopener">https://github.com/p4lang/</a></p>
<h2 id="P4语言编译-转换流程"><a href="#P4语言编译-转换流程" class="headerlink" title="P4语言编译/转换流程"></a>P4语言编译/转换流程</h2><p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/p4流程.png"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/p4流程.png" alt=""></a> </p>
<h2 id="每个仓库的功用和说明"><a href="#每个仓库的功用和说明" class="headerlink" title="每个仓库的功用和说明"></a>每个仓库的功用和说明</h2><p>仓库名称</p>
<p>仓库介绍</p>
<p>具体说明</p>
<p>是否可用</p>
<p>Behavior-model</p>
<p>(BMV2)</p>
<p>Rewrite of the behavioral model as a C++ project without auto-generated code (except for the PD interface)</p>
<p>新的Behavior-model，用于替换之前的p4c-behavioral，是一个新的P4运行时环境。</p>
<p>需要使用p4c-bm工具把P4代码转换成一个表示成软交换的json文件，</p>
<p>可以正常使用</p>
<p>p4c</p>
<p>P4_16 prototype compiler</p>
<p>解耦了前端编译和后端编译，均用统一的IR表示，前端针对P4_14和P4_16均可，后端可以编译为bmv2的json配置和ebpf的cpp代码</p>
<p>还在试验阶段，不过已经可用</p>
<p>p4factory</p>
<p>Compile P4 and run the P4 behavioral simulator</p>
<p>集合了P4的各种工具，可以直接让P4代码跑起来，在target文件夹中有许多p4-14的例子，并没有和P4-16工程同步更新</p>
<p>大体上可以跑起来，但是由于很久都没有更新，所以关于docker-image和INT应用的代码都已经broken，目前有修复的迹象（INT貌似已经修复）</p>
<p>p4c-bm</p>
<p>Generates the JSON configuration for the behavioral-model (bmv2), as well as the C/C++ PD code</p>
<p>为bmv2运行时环境生成json配置文件，（pd c++ code应该是protocol dependence cpp code）</p>
<p>可以正常使用</p>
<p>p4-hlir</p>
<p>（没有介绍）</p>
<p>P4的前端编译器，应该是针对于把P4代码转换成其他语言使用的（而且应该是针对于P4-14，因为P4-16已经将前端编译器放置于p4c的库中），使用bcc可以将P4解释为ebpf（和中间的c语言表示）</p>
<p>可以正常使用</p>
<p>ptf</p>
<p>Packet Test Framework</p>
<p>papers</p>
<p>Repository for papers related to P4</p>
<p>关于P4的一些文档和论文</p>
<p>switch</p>
<p>Consolidated switch repo (API, SAI and Nettlink)</p>
<p>包含了SAI和switchAPI的P4比较完整的switch示例（switch.p4），使用bmv2，支持INT，支持SAI</p>
<p>安装thrift的时候出现问题，没有运行成功，但理论上可以运行</p>
<p>ntf</p>
<p>Network Test Framework</p>
<p>基于mininet</p>
<p>还没有使用过</p>
<p>SAI</p>
<p>Switch Abstraction Interface</p>
<p>forked from opencomputeproject/SAI</p>
<p>p4-build</p>
<p>Infrastructure needed to generate, build and install the PD library for a given P4 program</p>
<p>为P4代码生成PD库（protocol dependence）</p>
<p>很久没更新了，但是目前可使用</p>
<p>p4ofagent</p>
<p>Openflow agent on a P4 dataplane</p>
<p>openflow控制器和P4运行时的中间翻译器</p>
<p>很久没更新了，还没使用过</p>
<p>tutorials</p>
<p>P4 language tutorials</p>
<p>一些会议或者活动的论文和示例，比如P4workshop和SIGCOMM</p>
<p>可用，应该去看看</p>
<p>p4c-behavioral</p>
<p>P4 compiler for the behavioral model</p>
<p>将P4代码编译成可以运行的代码，已经被bmv2代替</p>
<p>很久很久没更新了，更没有用过</p>
<p>scapy-vxlan</p>
<p>A scapy clone, with support for additional packet headers</p>
<p>使得scapy支持vxlan协议</p>
<p>可用</p>
<p>thrift</p>
<p>Mirror of Apache Thrift</p>
<p>thrift的镜像</p>
<p>可用</p>
<p>mininet</p>
<p>Emulator for rapid prototyping of Software Defined Networks <a href="http://mininet.org" target="_blank" rel="noopener">http://mininet.org</a></p>
<p>mininet的镜像</p>
<p>可用</p>
<p>PI</p>
<p>P4 PI headers and target-independent code</p>
<p>提供一个CLI下给bmv2提供流表得接口</p>
<p>可用</p>
<p>P4app</p>
<p>p4app is a tool that can build, run, debug, and test P4 programs. The philosophy behind p4app is “easy things should be easy” - p4app is designed to make small, simple P4 programs easy to write and easy to share with others.</p>
<p>一个可以编译、运行（14、16两种版本）、测试（ptf和mininet等）P4语言的库，它使用了一个封装好的docker镜像，并且把P4的运行变成了一个可以描述的工程</p>
<p>可用</p>
<p>Third-party</p>
<p>Third-party dependencies for p4lang software</p>
<p>P4仓库所依赖的一些第三方库</p>
<p>注：以上均根据最近尝试运行P4的GitHub代码时候的经验逐渐整理出，如有不对或者欠缺的地方希望得到大神们的指点。</p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2017/01/01/2016-e7-9a-84-e6-9c-80-e5-90-8e-e4-b8-80-e5-a4-a9-ef-bc-8c-e8-bf-98-e6-98-af-e6-9d-a5-e8-af-b4-e7-82-b9-e4-bb-80-e4-b9-88/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2017/01/01/2016-e7-9a-84-e6-9c-80-e5-90-8e-e4-b8-80-e5-a4-a9-ef-bc-8c-e8-bf-98-e6-98-af-e6-9d-a5-e8-af-b4-e7-82-b9-e4-bb-80-e4-b9-88/" itemprop="url">
                  2016的最后一天，还是来说点什么
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2017-01-01 00:59:14" itemprop="dateCreated datePublished" datetime="2017-01-01T00:59:14+08:00">2017-01-01</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/随笔/" itemprop="url" rel="index"><span itemprop="name">随笔</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>16年的确有许多不会轻易被忘记的事情。 整体来讲，今年的整体节奏相比去年是慢了些许，闲暇时间多了一些，但是收获一点也不少。</p>
<h2 id="三个Flag"><a href="#三个Flag" class="headerlink" title="三个Flag"></a>三个Flag</h2><p>今年开年就立了三个Flag，一个是在<a href="http://blog.zhengzi.me/162.html">期末杂记</a>中提到的，重拾自己对生活得激情和好奇；另一个是在<a href="http://blog.zhengzi.me/266.html">离</a>中提到的，要有存款，要经济独立；最后一个在 <a href="http://blog.zhengzi.me/readingplan">2016 读书计划</a>中提到的新年书单。 对于第一个，我认为完成度比较高。我开始去思考每一件看似合理而规矩的事情，也开始去打量生活中每天出现的新的事物，我开始变得Open；开始试着理解小朋友们聊天，琢磨它们的心思，认识他们的世界；我也开始不仅仅追求效率，开始有了生活，甚至偶然的机会，我试着去了解以前敬而远之的艺术，开始去思考其背后的存在论。从年初经常被人叫“大叔”，到最近很多人认为我的心态很年轻，我真的变化了许多。 第二个Flag就完成的不怎么好了。到现在为止，虽然每个月月都多少有些收入，但离经济独立还有一些距离。我也不想讲太多的原因，明年的情况一定会比今年好很多。 最后一个目标的完成度也不高，离截止日期还有两个月，大概只完成了三分之一的阅读量。除了有几本书是因为当时选择得不是很合理，看了不到一半就放弃了之外，其他的原因，就是太懒。</p>
<h2 id="学业"><a href="#学业" class="headerlink" title="学业"></a>学业</h2><p>我还有点记得年初决定是否要读研时候内心强烈的挣扎。我拿了一大张白纸，每天想到一点就写一点，把读研与否的利弊都写到纸上一条条去对比分析。但是用这种方法没有得出所以然，于是决定跟随内心——我想去试试做偏Research的事情的感觉，过了这个村，可就没这个店了。 看了一些资料后，我决定在网研院的智能组待一阵看看，于是四月份到六月份进行了为期两个半月的实习。嗯，老板很棒，除了做的事情还是太偏工程。不过可以考虑。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/913318504646938843-e1483208233501.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/913318504646938843-e1483208233501.jpg" alt=""></a></p>
<p>在智能实习时候的第一次也是最后一次聚餐</p>
<p>六月初，我便投入了前些日子还很不屑的考研大军之中。但还没来得及经历太多，就在九月份收到了保研的消息。这个时间点对我来说非常尴尬，却也是难得的体验。当时的情况是：我一手拿简历，一手去记录找过的和要找的老师。老司机光光白天带我刷楼，晚上请我吃饭。就这样，那几天我几乎刷遍了教二教三和整个科研楼。因为一些机缘巧合，在经历了面试以后，我还算比较顺利地进入了FNL（未来网络实验室）。 在FNL，一切都是重头开始。好在实验室的气氛非常棒，老师们也都很年轻有成，所做的事情也不是那么偏向应用，更多的还是去做一些世界上（可能）还没有的东西。这种感觉，我很喜欢！</p>
<p><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/318791579649752680.jpg" alt="">FNL小灰楼分部一瞥</p>
<p>到这里，接下来三年的生活基调就基本定了下来。</p>
<h2 id="技能点"><a href="#技能点" class="headerlink" title="技能点"></a>技能点</h2><p>JZSOpenProj没有怎么坚持下来，因为今年产出的代码本来就不多，质量也不高，能拿出来开源的东西就更少了。 总体来说，今年语言的基调还是定在了Python、PHP还有JavaScript，不过技能树又新加了C#和Java，硬是要算的话，还有最近在看的P4。算法和操作系统的硬伤也都已经开始着手解决了。 开发层面的话，我逐渐变成了Full Stack：会前端，懂后台，逼到绝处还能写一些安卓或UWP，甚至简单的数据分析也都可以顺手完成。 我也用了一年的时间，变成了Hackathon老司机，掐指一算我在一年里参加了大大小小五场Hackathon。 年初是的<a href="http://vline.zhengzi.me" target="_blank" rel="noopener">Vline</a>是HackPKU的成果，除去我们的产品，记忆最深的是凌晨四点树影婆娑还泛着冷光的未名湖；然后是微软夏令营，第一次接触到了HoloLens，接下来的几天，我完完全全被AR带来的效果所震撼；之后是在国子监举办的品玩Hackathon，我想我很有权利回答在古香古色的建筑里写代码是一种怎样的体验；最有意思的是Office的<a href="http://blog.zhengzi.me/551.html">Dev Days Asia</a>，我也特别想回答和一群很有趣的外国评委（特别是很逗的印度小哥）交流并抱回一台平衡车是一种怎样的体验；最后是微软俱乐部办的BeijingHackathon，这次Hackathon种，我见到俱乐部主席团里每个人的成长，心中也是百感交集。 [gallery columns=”2” size=”full” ids=”652,653,650,654,651,674” orderby=”rand”]</p>
<p>五场Hackathon</p>
<p>另外一件有意思的事情是在HackPKU的空暇时间，经过润哥、晓锋和健东一众的耐心指导，我终于了了一件儿时的心愿——学会自行车！之后作为新手，被老司机们带去过P大，北航，还有天安门，甚至还在养马岛上兜了一圈。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/576906444040133006.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/576906444040133006.jpg" alt=""></a>天安门夜行</p>
<h2 id="旅行"><a href="#旅行" class="headerlink" title="旅行"></a>旅行</h2><p>年初是哈尔滨。主题不是寒冷，而是神奇。我第一次在冰天雪地的世界里吃到了看起来挺热乎的冰糕，第一次被iPhone冻关机以后怎么找到回酒店的路的问题困扰，我也看到了比一幢房子还要高还大的冰雕，和几位在冰天雪地里让我很暖心的老同学。哈尔滨的世界仿佛就像是一场梦，梦里的冰天雪地，却怎么也感受不到寒冷。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/798825629742946303.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/798825629742946303.jpg" alt=""></a>神奇的巨大冰雕</p>
<p>天津因为是二刷，所以没有了最开始的新鲜感。一行见到了之前在Hackathon中遇到过的老朋友，还认识了几位前端大牛。最神奇的莫过于一个老年人密度极高的公园，我甚至都没法挤进去，从外面看，每个人都举着或者在胸口刮着一张牌子，写道类似“xxx，女儿，28岁，博士毕业，北京户口，有房有车”。我心想，还好兰州并没有这种地方（或许是我不知道？大雾）。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/96764664776605120.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/96764664776605120.jpg" alt=""></a>天津征婚一条街</p>
<p>烟台的主题是大海。待了一周，几乎每天的活动都在面对大海。我不会忘记烟台山上冰心的故居和山下那家被画在画里的滨海咖啡屋；不会忘记在波涛汹涌的大海旁开一瓶白兰地畅谈相对论；不会忘记几乎熬了一夜去看海上日出，然后抓了好几只派大星回去；不会忘记骑车在海岛逛了一周，回去之后皮肤黑了不止一圈。 [gallery columns=”2” size=”full” ids=”658,657” orderby=”rand”]</p>
<p>烟台海边二景</p>
<p>和黄海相对的，是腾格里沙漠。它们的相似是无边无垠，吞没一切。大海旁有沙滩，而沙漠旁也有黄河。两者一阴一阳，恰为互补。而我又极为幸运地在一个月内一一体会了一番。可能因为小时候生活环境的原因，对比下来，我更喜欢沙漠。沙漠多了份质朴，也更凸显出生命的韧劲与厚度。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/682573307158504644.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/682573307158504644.jpg" alt=""></a>茫茫腾格里</p>
<p>最后一程是杭州。自读了柳永那句“烟柳画桥，风帘翠幕，参差十万人家”，我就一直对于杭州有一种十分向往但又因为害怕见到会失望而不敢去看纠结。赶上去开会，就破釜沉舟一睹西湖的芳容。不料，我的心情也真的像是坐上了一台过山车。刚到杭州，雾霾很重，游了一圈西湖，感觉就是是在雾霾天去了一趟颐和园一般无趣。直到最后那天，天朗气清，我们沿着岳飞庙一路走过，所见之景也皆为情。突然就有了游在画中西湖之觉，有美景，有感情，更有文化。现在回想起来，仍是意犹未尽。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/892862531125135770.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/892862531125135770.jpg" alt=""></a>西子湖旁的幽涧</p>
<h2 id="生活"><a href="#生活" class="headerlink" title="生活"></a>生活</h2><p>今年最幸运的一件事儿，就是找到了一点生活。 大概从去年开始，我的生活就变成了只有每日的代码＋例行的沟通。每日忙忙碌碌，忙完这一波一定还会有下一波。这种状况大约持续到了今年夏天，开始准备考研是一个关键的转变。节奏慢下来以后，我发现其实有身边有很多朋友都很重视每天吃些什么，或者什么时候买一件新衣服，甚至还会挑剔杯子上的一个图案。我一开始从不解，到逐渐去关注，了解。 这个夏天，还做了一件令我以后绝对不会再后悔的事情——去听了一场五月天的演唱会。讲真，我从来没有如此High起来过。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/920536501655363836.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/920536501655363836.jpg" alt=""></a>五月天——要疯狂到日出</p>
<p>最近我也开始去尝试着了解艺术。我感受到的世界不再是只有技术与资本那个冷冰冰的存在，还有文化与艺术这种关乎一个人存在的真理。这些才是更重要的事情，需要去发现，去感受。我逐渐懂了一些以前总也看不懂的《谈美书简》，也更爱上了更像是一个长者和你谈心的宗先生的《美学散步》。前两天在国博里，我恰巧赶上了最后一天的中日韩明清时代艺术作品展，见到了许多大师的真迹。特别是郑板桥的竹子给我印象极深，看见竹子，就记起了当时课文中所说的“胸中勃勃，遂有画意”，明白了为何“手中之竹又不是胸中之竹也”。 当然，我现在最关注的事情是大一的创新创客教育。从我开始跟纪老师去宏福举办一场创客马拉松开始，就一直在想，我为什么居然会这么热心于这件事情。在和很多同学聊过以后才明白，大概是同理心所致。如果我大一时候有很多人同学都和我一起玩做开源硬件，我或许也不会抛下高中时候的底子，去彻底转去做Web开发吧。我从心底里还是想去帮他们一把，让他们远离团委和城郊给他们带来的桎梏，找到自己大学生活应该有的样子。我真心地希望学弟学妹们可以好好经历一次大学，找到真实的自己。纪老师在这里，真的做了很多事情，不过有太多的东西，需要经历才能理解。等过两年，如果他们还能记得纪老师的一些话的时候，他们应该也会像我一样来做这些事情。有一些思路，或许等过两天，我会专门写一片博文来阐述出来。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/94198206647893469.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/94198206647893469.jpg" alt=""></a>宏福校区信通院创客马拉松</p>
<p>最后想说，以后回家的日子会越来越少，一定要争取一切机会多陪陪家人，让他们每天都过得开开心心。写到这里，真的好想回家~（作哭脸）</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/734707548342899176.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/734707548342899176.jpg" alt=""></a>兰州黄河铁桥夜景</p>
<h2 id="团队"><a href="#团队" class="headerlink" title="团队"></a>团队</h2><p>我管理的和我参与的团队，一年中的变化也非常大。 先谈谈微软俱乐部吧。我记得上半年想的最艰难的事情之一，就是俱乐部的换届问题。慎之又慎思之又思，才决定了下一届主席团的团队架构。现在看来，当时的思考到的问题几乎全都命中，但同时，他们也让我有了非常多的惊喜，算是一件挺圆满的事儿。</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/123490638559305549.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/123490638559305549.jpg" alt=""></a>俱乐部团队小合照</p>
<p>Debug、VLine、小黑，从创新杯一路走到现在，队名换了好多，我们也算是做项目的老司机团队了。虽然以后就难凑齐，但是呐，聚是一团火，散是满天星~闲了轮流坐庄请客吃饭的事儿肯定不能落下。 弹幕派这边也有大概半年了。从最开始我和志龙到现在有了八九个小伙伴，也是非常不容易。团队里的每个同学都非常厉害，出去可以独当一面。但是如果各自为战，那一定不会有今天的弹幕派。我印象最深的事儿呢，就是从一开始大家坐在一起没人引起话题的话一句话都没有，到现在（几乎）每周四大家坐下可以随随便便聊一个晚上，其实我们每一个同伴，都像小王子的那朵玫瑰花一样，相遇，然后互相驯服。有机会做一个会有成千上万用户使用的软件，的确是很有意思的一件事儿呢！</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/97779876272820999.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/97779876272820999.jpg" alt=""></a>中秋之夜的Pie Team（手里拿的是月饼，并不是在表白）</p>
<p>最后聊到乐享其约和趣健跑。成立公司以后这段时间，我们成了比赛和PPT专业户。虽然被受鄙视，但也还算顺利地拿到了各路奖项。所以，我们是赶上了一个好的时候。但空有BP和演讲，研发和市场还远远跟不上。好在，现在的思路转换得很棒，甚至好得有点超过我的预想。明年，乐享奇迹加油！</p>
<p><a href="http://blog.zhengzi.me/wp-content/uploads/2017/01/88469527649847257.jpg"><img src="http://blog.zhengzi.me/wp-content/uploads/2017/01/88469527649847257.jpg" alt=""></a></p>
<p>本科阶段的先后两家公司</p>
<h2 id="再立Flag"><a href="#再立Flag" class="headerlink" title="再立Flag"></a>再立Flag</h2><p><a href="http://music.163.com/#/song?id=411214279" target="_blank" rel="noopener">http://music.163.com/#/song?id=411214279</a> 新的一年里，对合适的人和合适的事情，投入更多的真诚而非套路。 继续保持对世界的好奇心，扩大阅读量，提高生命的纵深。 翻了一番照片，看见了去年和师兄师姐一起拍的毕业照，现在许多人都大概已经天各一方，再难想见。自己也还有半年就本科毕业了，一定要珍惜珍重圈子里的每一个人。 [gallery columns=”1” size=”full” ids=”669,670”]</p>
<p>16年夏天和师兄师姐们的毕业合照</p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2016/12/26/leetcode-two-sum/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2016/12/26/leetcode-two-sum/" itemprop="url">
                  LeetCode-Two Sum
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2016-12-26 13:07:47" itemprop="dateCreated datePublished" datetime="2016-12-26T13:07:47+08:00">2016-12-26</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/算法/" itemprop="url" rel="index"><span itemprop="name">算法</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>最近准备开始刷一些LeetCode的题目，从简单的开始，第一题是Two Sum。 <a href="https://leetcode.com/problems/two-sum/" target="_blank" rel="noopener">https://leetcode.com/problems/two-sum/</a> 前一阵问小伙伴，被告知C#在LeetCode上不是很好用，所以这次就选了Python作为实现语言。 思路一：最脑残的方法，直接表达题目的意思</p>
<p>class Solution(object):<br>    def twoSum(self, nums, target):<br>        “””<br>        :type nums: List[int]<br>        :type target: int<br>        :rtype: List[int]<br>        “””</p>
<pre><code>for i in range(len(nums)):
    for j in range(len(nums)):
        if i==j:
            continue;
        if nums\[i\]+nums\[j\]==target:
            return \[i,j\]
</code></pre><p>O(n^2)的效率，有时候能过，不过在运行一些算例的时候会超时，上次成功用了725ms 思路二：改进了一下循环，减少了很多无谓的比较</p>
<p>class Solution(object):<br>    def twoSum(self, nums, target):<br>        “””<br>        :type nums: List[int]<br>        :type target: int<br>        :rtype: List[int]<br>        “””</p>
<pre><code>for i in range(len(nums)):
    for j in range(i+1,len(nums)):
        if nums\[i\]+nums\[j\]==target:
            return \[i,j\]
</code></pre><p>修改以后，效果也还不错，用时569ms 思路三：利用Python的哈希表（Dict）数据结构</p>
<p>class Solution(object):<br>    def twoSum(self, nums, target):<br>        “””<br>        :type nums: List[int]<br>        :type target: int<br>        :rtype: List[int]<br>        “””<br>        sumDict={}<br>        for i in xrange(len(nums)):<br>            n=nums[i]<br>            if target-n in sumDict:<br>                return [sumDict[target-n],i]<br>            sumDict[n]=i</p>
<p>这一种应该算是我能想到的最简单的算法了，在看了一些网上的答案以后，感觉都是实现了一个哈希表，表现的结果应该大同小异。最终用时408ms。</p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2016/12/20/e4-b8-80-e6-ac-a1-e8-b2-8c-e4-bc-bc-e6-88-90-e5-8a-9f-e7-9a-84onos-e5-ae-89-e8-a3-85-e7-bb-8f-e5-8e-86/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2016/12/20/e4-b8-80-e6-ac-a1-e8-b2-8c-e4-bc-bc-e6-88-90-e5-8a-9f-e7-9a-84onos-e5-ae-89-e8-a3-85-e7-bb-8f-e5-8e-86/" itemprop="url">
                  一次貌似成功的ONOS安装经历
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2016-12-20 14:54:39" itemprop="dateCreated datePublished" datetime="2016-12-20T14:54:39+08:00">2016-12-20</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/ONOS/" itemprop="url" rel="index"><span itemprop="name">ONOS</span></a></span>

                
                
                  , 
                
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/ONOS/SDN/" itemprop="url" rel="index"><span itemprop="name">SDN</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>先说说之前的失败经历吧。 前几天我一直尝试在 64 位的 Ubuntu16.04 上进行安装，分别尝试过 ONOS 1.6 – 1.8 （因为只有1.6以上的版本才Support P4 的 bmv2）这三个版本，经过漫长的编译过程，均编译成功（除了偶尔因为万里长城链接超时），但是在运行的时候总是会提示出错，错误信息大概分为以下两种：</p>
<ol>
<li>在使用 ok clean 命令启动的时候出现 “ No adapter with IP 127.0.0.1 found! ”，然后。。无法启动。</li>
<li>在使用 Web GUI 登陆成功以后提示“ ONOS GUI not ready yet… please stand by… ”字样。。然后。。就没有然后了。</li>
</ol>
<p>在束手无策的时候，准备换一个环境重新尝试一下，于是使用vmware创建了一个 Ubuntu14.04 的虚拟机，然后发现一切顺利。 主要的安装步骤可以参考：<a href="https://wiki.onosproject.org/display/ONOS/Installing+and+Running+ONOS" target="_blank" rel="noopener">https://wiki.onosproject.org/display/ONOS/Installing+and+Running+ONOS</a> 除了，不必去 Packaging ONOS tar.gz or zip distributions 和 export ONOS_IP 。 所以。。问题的解决方案是：系统版本一定要选对。</p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
      

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="http://blog.zhengzi.me/2016/12/10/e4-bb-8a-e5-a4-a9-e6-9d-a5-e8-b0-88-e8-b0-88x-e5-b0-8f-e5-a7-90-e5-90-a7-trashed/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Jason Bian">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/images/avatar.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="政子的博客">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
                
                <a class="post-title-link" href="/2016/12/10/e4-bb-8a-e5-a4-a9-e6-9d-a5-e8-b0-88-e8-b0-88x-e5-b0-8f-e5-a7-90-e5-90-a7-trashed/" itemprop="url">
                  test123
                </a>
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">Posted on</span>
              

              
                
              

              <time title="Created: 2016-12-10 23:26:19" itemprop="dateCreated datePublished" datetime="2016-12-10T23:26:19+08:00">2016-12-10</time>
            

            
              

              
                
                <span class="post-meta-divider">|</span>
                

                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                
                  <span class="post-meta-item-text">Edited on</span>
                
                <time title="Modified: 2018-08-21 17:49:42" itemprop="dateModified" datetime="2018-08-21T17:49:42+08:00">2018-08-21</time>
              
            
          </span>

          
            <span class="post-category" >
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">In</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/随笔/" itemprop="url" rel="index"><span itemprop="name">随笔</span></a></span>

                
                
              
            </span>
          

          
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        
          
            <p>今天来谈谈x小姐吧 x小姐个子不高，长的很是瘦削，目测不到50公斤，大众脸，但认真看起来又有些漂亮。 我跟x认识的年头不短了，至于怎么认识的，我说我怎么也想不起来了，她说，她能想到一百种我们认识的方法。我说，那等我以后写书的时候，你就去挑一种最刺激的给我说，我就这样写进去，反正故事要精彩离奇读者看了才会过瘾。她说，我——才——懒——得——去——说——呢！我说，是你根本还没想到第二种吧。 其实，没有x小姐，我也都坚持不过这些年。 从诺基亚的老人机到三星最新的盖世，我跟她的聊天记录，一条都舍不得删。有时候压着马路，我会若无其事地矫情两句，“其实吧，有时候想想，你对于我，就像许嵩那句歌里面唱的——”“哎，我知道了，但是不许你说！”但是她却悄悄地唱起来——你看过了许多美景，你看过了许多美女，你迷失在地图上每一道短暂的光阴。</p>
<hr>
<p>x小姐一直标榜自己是一个没有故事的女同学。但是每当我们去雕刻时光的时候，她时常会邀请我坐在吧台边上，自己随便点一杯酒，就自顾自地吐着烟圈儿。过了一阵儿，不管我是什么状态，她就一定会开始惟妙惟肖地讲起故事。哪次我都听得入胜，却也都来不及去想这件事儿究竟是有是无。当然，在讲完之后，她总是会说——故事纯属虚构，弄得我也不由得相信了她说的每一个字。 她喜欢说有关于w的故事。在我的印象里，w长得也不高，而且皮肤有些黑，甚至还有些驼背。她最喜欢的，就是说w很懒，不愿意去理发。每次头发一长，就随便去村头找一个的剃头匠，剃一个很随便的头，不管是光头、园寸、还是板寸，她都挺喜欢。其实，她更喜欢看的呢，是w那乱糟糟的发型。 她讲完以后，已经有些醉意，便让我去讲故事。我说，我不喜欢讲故事，更不喜欢以讲第一人称的故事，因为每一个进入我故事里的人，都已经不知所踪了。 她一看从我嘴里撬不出话，就吵着跟我玩游戏，输了的话就要说一个秘密。我知道，这个游戏玩不玩已经由不得我了，以x小姐地聪明程度，我连输多少局都是必然的。“今天我们文斗，五子棋、跳棋、象棋、围棋、国际象棋，你挑一个吧~不对，不许挑跳棋，我下不过你！”“那我不玩了！”“你敢！信不信我今天不让你走~”“那好吧，随你，就第一个五子棋吧。”于是十几分钟以后战斗结束，胜负其实在开局之前就已经定了。 x小姐不客气地问：“你不是地地道道的西北汉子么？怎么有时候从你狗嘴里还能吐出几句四川话，说，哪学的，想干什么？”说着一脸坏笑。“我就是看快乐驿站随便学了几句，要不你再来教我几句啊！”“爪子！你别想唬我。”“哎，其实嘛，你看，四川啊都管川妹子叫美（mèi）女（lǜ），肯定都很漂亮呀！所以嘛，我要找个幺妹，次香的，喝辣的，你懂的！”“所以，是不是有什么进展没告诉我？”“一个机会用完了，下一局。”</p>
<hr>
<p>我记得那是一个冬天，x小姐穿了一身白色的大衣，戴了一副黄框的眼镜，是那种很淡很淡的米黄色，但是我一眼就能认得出来。那一刻，我觉得她漂亮地简直可以出门左转去参加一场婚礼。 她说，“明天就是你的生日了，我准备给你一个惊喜。”“今天穿的这么好看，不会是准备把你送给我吧？”结局可想而知——我被揍了一顿：“老娘穿的好看关你p事！”等我回到家里，发现家里常年空着的花瓶里多了一扎满天星，淡淡的米黄色，我还是一眼就能认得出来。 接着，接到x小姐电话，“明天，你的时间归我！”“我好不容易熬到一次生日，你。。总得给我一个申诉的机会吧？”“你说说看呀~”“我明天，嗯，我觉得还是时间归你比较合适。”“申诉有效，批准！”“老地方？雕——”“才不！我们去J城吧！”“那么大老远，得早点去。你这么懒，能起得来么？”“所以说，明天你得叫我起床，Viber叫不醒的话打我手机，要是还没叫醒的话，你就去死吧。”“为什么是又我？”“废话，不是你还是我！”“喂。。这么不讲理，喂——喂？”</p>
<hr>
<p>“叶子，是不会飞翔的翅膀；翅膀，是落在天上的叶子。”只见一个泣不成声的人从被一个前一秒还沉浸在音乐中的人从台上扶下来。 那发生在我们经常走过的那条小街上。路过没有名字的酒吧时候，x小姐突然听见里面有一个不知名号的歌手在弹唱《叶子》，二话不说，就冲进去从她手里把话筒夺过，开始自顾自地清唱起来。她的音线很美，略带沧桑又不失柔美。纵我听了无数遍，也从来没有一次让我如此感动。我想，就算阿桑还在，她也都一定会沉醉于是谁唱得如此好听动情。 “为什么哭成这样？”“谢谢你。”“为什么谢我？”“你傻啊？” x小姐忽然笑了起来，眼睛眯成一条缝儿地盯着我：“那我给你一个奖励吧！闭上眼睛。”我好像知道接下来要发生什么，可是还是抑制不住心脏的乱跳。我甚至怀疑，心率不齐的毛病，就是从那个时候开始的。 那个吻轻轻地，就一刹那。感觉，好像是在冬天里轻轻伸了一个懒腰，就到了春天。全身都酥酥麻麻。 “礼物太重，我看我得还回去~”“想得美！”x小姐把脸一侧，她没有说不，也没有说可以。</p>
<hr>
<p>那是一个江南小巷，下着雨，没有油纸伞。我和x小姐走到了一家小店。店里面多是我一眼都不想看的旅游纪念品。 x小姐在一堆字母里面挑来挑去，我在一旁无聊地回着邮件。突然，我感到一冰，一个手环贴在我的腕上。一看，上面是我们名字的缩写。她正满心欢喜地等着我夸她。还没等我说话，她也抬起手，跟我一比，居然是一对镜像。我摸摸x小姐的头，说：“哎呦还不错哦。”然而看见她一脸坏笑，一把扯下我的运动手环，丢尽自己刚买的深绿色小包里，“以后见我就带这个，听到没有？！”“好，好，好。哎，真是拿你没办法。” 我担心一会儿又出什么乱子，刚准备拉着她结账走人。她却笑眯眯拿出钱包：“别动，我来结账！”“欸？平时你没这么积极啊？”我一脸惊恐。“所以，我是有条件的。”“拒绝！”“拒绝无效~”说罢她便趾高气昂地给老板拍上钱，走人。 晚上在小桥边，x小姐因为中午吃的太辣，肚子有些不舒服，但还是执意要走一走。 我要了一份章鱼小丸子作为晚餐。还没来得及入口，x小姐突然说，“认真讲，你的理想是什么？”“首先，我要有理想。”“难倒你就真的要这样，不想以后？一辈子照多里算，已经快过去四分之一了。”我准备一句玩笑应付过去：“嘿，没看出来你算数挺好啊？”她却一脸认真：“我不要再这样子过了。”我一脸惊愕：“我，我。。。的理想——就是你。”她却像知道我的标准答案似的：“我们，嗯，还是以后少见面吧。” 那天晚上，我还是回家了。只是兜里，再怎么也摸不出一根多余的兰州。</p>

          
        
      
    </div>

    

    
    
    

    

    

    

    <footer class="post-footer">
      

      

      

      
      
        <div class="post-eof"></div>
      
    </footer>
  </div>
  
  
  
  </article>


    
  </section>

  
  <nav class="pagination">
    <a class="extend prev" rel="prev" href="/page/2/"><i class="fa fa-angle-left" aria-label="Previous page"></i></a><a class="page-number" href="/">1</a><a class="page-number" href="/page/2/">2</a><span class="page-number current">3</span><a class="page-number" href="/page/4/">4</a><span class="space">&hellip;</span><a class="page-number" href="/page/9/">9</a><a class="extend next" rel="next" href="/page/4/"><i class="fa fa-angle-right" aria-label="Next page"></i></a>
  </nav>



          </div>
          

        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    
    <div class="sidebar-inner">

      

      

      <section class="site-overview-wrap sidebar-panel sidebar-panel-active">
        <div class="site-overview">
          <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
            
              <img class="site-author-image" itemprop="image"
                src="/images/avatar.jpg"
                alt="Jason Bian" />
            
              <p class="site-author-name" itemprop="name">Jason Bian</p>
              <p class="site-description motion-element" itemprop="description"></p>
          </div>

          
            <nav class="site-state motion-element">
              
                <div class="site-state-item site-state-posts">
                
                  <a href="/archives/">
                
                    <span class="site-state-item-count">86</span>
                    <span class="site-state-item-name">posts</span>
                  </a>
                </div>
              

              
                
                
                <div class="site-state-item site-state-categories">
                  
                    
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                    <span class="site-state-item-count">41</span>
                    <span class="site-state-item-name">categories</span>
                  
                </div>
              

              
                
                
                <div class="site-state-item site-state-tags">
                  
                    
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                    <span class="site-state-item-count">109</span>
                    <span class="site-state-item-name">tags</span>
                  
                </div>
              
            </nav>
          

          

          

          
          

          
          

          
            
          
          

        </div>
      </section>

      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright">&copy; <span itemprop="copyrightYear">2018</span>
  <span class="with-love" id="animate">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">Jason Bian</span>

  

  
</div>




  <div class="powered-by">Powered by <a class="theme-link" target="_blank" href="https://hexo.io">Hexo</a></div>



  <span class="post-meta-divider">|</span>



  <div class="theme-info">Theme – <a class="theme-link" target="_blank" href="https://theme-next.org">NexT.Gemini</a></div>




        








        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    

    
	
    

    
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>


























  
  
    <script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script>
  

  
  
    <script type="text/javascript" src="/lib/velocity/velocity.min.js?v=1.2.1"></script>
  

  
  
    <script type="text/javascript" src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>
  


  


  <script type="text/javascript" src="/js/src/utils.js?v=6.4.0"></script>

  <script type="text/javascript" src="/js/src/motion.js?v=6.4.0"></script>



  
  


  <script type="text/javascript" src="/js/src/affix.js?v=6.4.0"></script>

  <script type="text/javascript" src="/js/src/schemes/pisces.js?v=6.4.0"></script>



  

  


  <script type="text/javascript" src="/js/src/bootstrap.js?v=6.4.0"></script>



  



  










  





  

  

  

  

  
  

  

  

  

  

  

</body>
</html>
